package collectionFrame;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Vector;

public class Demo2_ArrayList {

    /**
     * 泛型：跟数组中的类型是一样 int[]
     *      规定数组(集合)中所有元素的类型，如果不写默认使用Object作为泛型
     *
     * List
     *   列表，也可以叫做序列
     *   是一个可以重复的有序集合
     *     可以重复：在集合中可以存在多个相同的元素
     *     有序：不是排序，而是数据按照顺序放入，可以按照顺序取出。通过索引实现
     *
     *   ArrayList
     *     动态数组：可以根据元素的数量自动进行扩容的数组
     *     所有的方法都是数组的方法
     *   Vector
     *     用法与ArrayList基本一致
     *     是比较早期的版本，现在基本不用
     *     ArrayList是线程不安全的，Vector是线程安全的
     */

    public static void method_arrayList(){

        List<Integer> list_num_old = new ArrayList<>();
        list_num_old.add(111);
        list_num_old.add(222);

        //普通使用，可以直接用当前类接收
        //如果涉及到方法中的参数需要List类型的参数的时候，就需要使用多态向上转型，用父接口接收
        List<Integer> list_num = new ArrayList<Integer>();
        list_num.add(1);
        list_num.add(2);
        list_num.add(3);

        list_num.add(0,100);


        System.out.println(list_num);
        System.out.println(list_num.get(0));

        list_num.set(2,200);
        System.out.println(list_num);

        list_num.remove(3);
        System.out.println(list_num);

        System.out.println(list_num.isEmpty());

        System.out.println(list_num.size());


        System.out.println(list_num.subList(1, 3));

        list_num.clear();
        System.out.println(list_num);


    }

    public static void method_vector(){
        Vector<String> strings = new Vector<>();
        strings.add("hello");
        System.out.println(strings);
    }


    public static void main(String[] args) {
//        Demo2_ArrayList.method_arrayList();
        Demo2_ArrayList.method_vector();
    }

}
